package com.xiahui.day10.Test2;

/**
 * 代码解释：
 *  private 属性：
 *  name 和 age 属性被声明为 private，这意味着它们只能在 Person 类内部访问，外部无法直接访问。
 *  public Getter 和 Setter 方法：
 *  getName() 和 getAge() 方法用于获取 name 和 age 属性的值。
 *  setName() 和 setAge() 方法用于设置 name 和 age 属性的值。
 *  数据验证：
 *  在 setName() 和 setAge() 方法中，添加了数据验证的逻辑，确保设置的值是有效的。 例如，age 必须在 0 到 150 之间。
 *  外部访问：
 *  在 main() 方法中，只能通过 getName(), getAge(), setName() 和 setAge() 方法来访问和修改 Person 对象的 name 和 age 属性，无法直接访问。
 *  尝试直接访问 person.name 会导致编译错误，因为 name 属性是私有的。
 */
public class Person {
    // 私有属性 (只能在 Person 类内部访问)
    private String name;
    private int age;

    // 构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 公有的 Getter 方法 (用于获取 name 属性的值)
    public String getName() {
        return name;
    }

    // 公有的 Setter 方法 (用于设置 name 属性的值)
    public void setName(String name) {
        if (name != null && !name.isEmpty()) { // 添加验证
            this.name = name;
        } else {
            System.out.println("Invalid name");
        }
    }

    // 公有的 Getter 方法 (用于获取 age 属性的值)
    public int getAge() {
        return age;
    }

    // 公有的 Setter 方法 (用于设置 age 属性的值)
    public void setAge(int age) {
        if (age >= 0 && age <= 150) { // 添加验证
            this.age = age;
        } else {
            System.out.println("Invalid age");
        }
    }

    public static void main(String[] args) {
        Person person = new Person("Alice", 30);

        // 通过 Getter 方法获取属性值
        System.out.println("Name: " + person.getName());  // 输出：Name: Alice
        System.out.println("Age: " + person.getAge());    // 输出：Age: 30

        // 通过 Setter 方法设置属性值
        person.setName("Bob");
        person.setAge(25);

        System.out.println("New Name: " + person.getName()); // 输出：New Name: Bob
        System.out.println("New Age: " + person.getAge());   // 输出：New Age: 25

        // 尝试设置无效的 age 值
        person.setAge(-10); // 输出：Invalid age
        System.out.println("Age: " + person.getAge());    // 输出：Age: 25 (值未改变)

        // 无法直接访问私有属性 (会报错)
        // System.out.println(person.name); // 错误：name has private access in Person
    }
}
